package cn.zhoujing.demo.redis.enums;

import org.springframework.util.StringUtils;

/**
 * @author zhoujing
 * @createTime 2023/11/19 - 14:56
 */
public enum AuthorizedGrantTypeEnum {

    /**
     * 授权码模式,这个是标准模式
     */
    AUTHORIZATION_CODE(0, "authorization_code"),
    /**
     * 密码模式,直接拿用户的账号密码授权,不安全
     */
    PASSWORD(1, "password"),
    /**
     * 客户端模式,用client_id和密码授权,和用户无关的授权方式
     */
    CLIENT_CREDENTIALS(2, "client_credentials"),
    /**
     * 简单模式,这个主要是给无后台的纯前端项目用的
     */
    IMPLICIT(3, "implicit"),
    /**
     * 使用有效的Refresh_token去重新生成一个Account_token,之前的会失效
     */
    REFRESH_TOKEN(4, "refresh_token"),
    ;


    private Integer code;

    private String typeName;


    AuthorizedGrantTypeEnum(Integer code, String typeName) {
        this.code = code;
        this.typeName = typeName;
    }

    public Integer getCode() {
        return code;
    }

    public String getTypeName() {
        return typeName;
    }

    public static AuthorizedGrantTypeEnum getByTypeName(String type){
        if(!StringUtils.hasText(type)){
            return null;
        }
        for (int i = 0; i < AuthorizedGrantTypeEnum.values().length; i++) {
            AuthorizedGrantTypeEnum typeEnum = AuthorizedGrantTypeEnum.values()[i];
            if(type.equals(typeEnum.getTypeName())){
                return typeEnum;
            }
        }
        return null;
    }

}
